home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch10 / Pickover.frm (.txt) < prev    next >
Visual Basic Form  |  1999-06-09  |  10KB  |  356 lines

  1. VERSION 5.00
  2. Begin VB.Form frmPickover 
  3.    Caption         =   "Pickover"
  4.    ClientHeight    =   5430
  5.    ClientLeft      =   1800
  6.    ClientTop       =   705
  7.    ClientWidth     =   6375
  8.    LinkTopic       =   "Form1"
  9.    PaletteMode     =   1  'UseZOrder
  10.    ScaleHeight     =   5430
  11.    ScaleWidth      =   6375
  12.    Begin VB.Frame Frame1 
  13.       Caption         =   "Projection"
  14.       Height          =   1335
  15.       Left            =   0
  16.       TabIndex        =   19
  17.       Top             =   3120
  18.       Width           =   930
  19.       Begin VB.OptionButton optPlane 
  20.          Caption         =   "YZ"
  21.          Height          =   255
  22.          Index           =   2
  23.          Left            =   120
  24.          TabIndex        =   22
  25.          Top             =   960
  26.          Width           =   615
  27.       End
  28.       Begin VB.OptionButton optPlane 
  29.          Caption         =   "XZ"
  30.          Height          =   255
  31.          Index           =   1
  32.          Left            =   120
  33.          TabIndex        =   21
  34.          Top             =   600
  35.          Width           =   615
  36.       End
  37.       Begin VB.OptionButton optPlane 
  38.          Caption         =   "XY"
  39.          Height          =   255
  40.          Index           =   0
  41.          Left            =   120
  42.          TabIndex        =   20
  43.          Top             =   240
  44.          Value           =   -1  'True
  45.          Width           =   615
  46.       End
  47.    End
  48.    Begin VB.TextBox txtZ0 
  49.       Height          =   285
  50.       Left            =   240
  51.       TabIndex        =   18
  52.       Text            =   "0"
  53.       Top             =   2640
  54.       Width           =   615
  55.    End
  56.    Begin VB.TextBox txtY0 
  57.       Height          =   285
  58.       Left            =   240
  59.       TabIndex        =   16
  60.       Text            =   "0"
  61.       Top             =   2280
  62.       Width           =   615
  63.    End
  64.    Begin VB.TextBox txtX0 
  65.       Height          =   285
  66.       Left            =   240
  67.       TabIndex        =   14
  68.       Text            =   "0"
  69.       Top             =   1920
  70.       Width           =   615
  71.    End
  72.    Begin VB.TextBox txtE 
  73.       Height          =   285
  74.       Left            =   240
  75.       TabIndex        =   12
  76.       Text            =   "1.0"
  77.       Top             =   1440
  78.       Width           =   615
  79.    End
  80.    Begin VB.TextBox txtD 
  81.       Height          =   285
  82.       Left            =   240
  83.       TabIndex        =   10
  84.       Text            =   "-2.5"
  85.       Top             =   1080
  86.       Width           =   615
  87.    End
  88.    Begin VB.TextBox txtC 
  89.       Height          =   285
  90.       Left            =   240
  91.       TabIndex        =   8
  92.       Text            =   "-0.6"
  93.       Top             =   720
  94.       Width           =   615
  95.    End
  96.    Begin VB.TextBox txtB 
  97.       Height          =   285
  98.       Left            =   240
  99.       TabIndex        =   6
  100.       Text            =   "0.5"
  101.       Top             =   360
  102.       Width           =   615
  103.    End
  104.    Begin VB.TextBox txtA 
  105.       Height          =   285
  106.       Left            =   240
  107.       TabIndex        =   4
  108.       Text            =   "2.0"
  109.       Top             =   0
  110.       Width           =   615
  111.    End
  112.    Begin VB.CommandButton cmdClear 
  113.       Cancel          =   -1  'True
  114.       Caption         =   "Clear"
  115.       Height          =   375
  116.       Left            =   120
  117.       TabIndex        =   2
  118.       Top             =   5040
  119.       Width           =   615
  120.    End
  121.    Begin VB.PictureBox picCanvas 
  122.       BackColor       =   &H00000000&
  123.       FillStyle       =   0  'Solid
  124.       ForeColor       =   &H000000FF&
  125.       Height          =   5415
  126.       Left            =   960
  127.       ScaleHeight     =   357
  128.       ScaleMode       =   3  'Pixel
  129.       ScaleWidth      =   357
  130.       TabIndex        =   1
  131.       Top             =   0
  132.       Width           =   5415
  133.    End
  134.    Begin VB.CommandButton cmdGo 
  135.       Caption         =   "Go"
  136.       Default         =   -1  'True
  137.       Height          =   375
  138.       Left            =   120
  139.       TabIndex        =   0
  140.       Top             =   4560
  141.       Width           =   615
  142.    End
  143.    Begin VB.Label Label1 
  144.       Caption         =   "Z0"
  145.       Height          =   255
  146.       Index           =   7
  147.       Left            =   0
  148.       TabIndex        =   17
  149.       Top             =   2640
  150.       Width           =   255
  151.    End
  152.    Begin VB.Label Label1 
  153.       Caption         =   "Y0"
  154.       Height          =   255
  155.       Index           =   6
  156.       Left            =   0
  157.       TabIndex        =   15
  158.       Top             =   2280
  159.       Width           =   255
  160.    End
  161.    Begin VB.Label Label1 
  162.       Caption         =   "X0"
  163.       Height          =   255
  164.       Index           =   5
  165.       Left            =   0
  166.       TabIndex        =   13
  167.       Top             =   1920
  168.       Width           =   255
  169.    End
  170.    Begin VB.Label Label1 
  171.       Caption         =   "E"
  172.       Height          =   255
  173.       Index           =   4
  174.       Left            =   0
  175.       TabIndex        =   11
  176.       Top             =   1440
  177.       Width           =   255
  178.    End
  179.    Begin VB.Label Label1 
  180.       Caption         =   "D"
  181.       Height          =   255
  182.       Index           =   3
  183.       Left            =   0
  184.       TabIndex        =   9
  185.       Top             =   1080
  186.       Width           =   255
  187.    End
  188.    Begin VB.Label Label1 
  189.       Caption         =   "C"
  190.       Height          =   255
  191.       Index           =   2
  192.       Left            =   0
  193.       TabIndex        =   7
  194.       Top             =   720
  195.       Width           =   255
  196.    End
  197.    Begin VB.Label Label1 
  198.       Caption         =   "B"
  199.       Height          =   255
  200.       Index           =   1
  201.       Left            =   0
  202.       TabIndex        =   5
  203.       Top             =   360
  204.       Width           =   255
  205.    End
  206.    Begin VB.Label Label1 
  207.       Caption         =   "A"
  208.       Height          =   255
  209.       Index           =   0
  210.       Left            =   0
  211.       TabIndex        =   3
  212.       Top             =   0
  213.       Width           =   255
  214.    End
  215. Attribute VB_Name = "frmPickover"
  216. Attribute VB_GlobalNameSpace = False
  217. Attribute VB_Creatable = False
  218. Attribute VB_PredeclaredId = True
  219. Attribute VB_Exposed = False
  220. Option Explicit
  221. Private Enum PlaneTypes
  222.     plane_XY = 0
  223.     plane_XZ = 1
  224.     plane_YZ = 2
  225. End Enum
  226. Private SelectedPlane As PlaneTypes
  227. Private Running As Boolean
  228. Private A As Single
  229. Private B As Single
  230. Private C As Single
  231. Private D As Single
  232. Private E As Single
  233. Private X0 As Single
  234. Private Y0 As Single
  235. Private Z0 As Single
  236. ' Draw the curve.
  237. Private Sub DrawCurve()
  238. Const XMIN = -2.1
  239. Const XMAX = 2.1
  240. Const YMIN = -2.1
  241. Const YMAX = 2.1
  242. Const ZMIN = -1.2
  243. Const ZMAX = 1.2
  244. Dim wid As Single
  245. Dim hgt As Single
  246. Dim xoff As Single
  247. Dim yoff As Single
  248. Dim zoff As Single
  249. Dim xscale As Single
  250. Dim yscale As Single
  251. Dim zscale As Single
  252. Dim x As Single
  253. Dim y As Single
  254. Dim z As Single
  255. Dim x2 As Single
  256. Dim y2 As Single
  257. Dim i As Integer
  258.     ' See how much room we have.
  259.     wid = picCanvas.ScaleWidth
  260.     hgt = picCanvas.ScaleHeight
  261.     Select Case SelectedPlane
  262.         Case plane_XY
  263.             xoff = wid / 2
  264.             yoff = hgt / 2
  265.             xscale = wid / (XMAX - XMIN)
  266.             yscale = hgt / (YMAX - YMIN)
  267.         Case plane_XZ
  268.             xoff = wid / 2
  269.             zoff = hgt / 2
  270.             xscale = wid / (XMAX - XMIN)
  271.             zscale = hgt / (ZMAX - ZMIN)
  272.         Case plane_YZ
  273.             yoff = wid / 2
  274.             zoff = hgt / 2
  275.             yscale = wid / (YMAX - YMIN)
  276.             zscale = hgt / (ZMAX - ZMIN)
  277.     End Select
  278.     ' Get the drawing parameters.
  279.     GetParameters
  280.     ' Compute the values.
  281.     x = X0
  282.     y = Y0
  283.     z = Z0
  284.     i = 0
  285.     Do While Running
  286.         ' Move to the next point.
  287.         x2 = Sin(A * y) - z * Cos(B * x)
  288.         y2 = z * Sin(C * x) - Cos(D * y)
  289.         z = Sin(x)
  290.         x = x2
  291.         y = y2
  292.         ' Plot the point.
  293.         Select Case SelectedPlane
  294.             Case plane_XY
  295.                 picCanvas.PSet (x * xscale + xoff, y * yscale + yoff)
  296.             Case plane_XZ
  297.                 picCanvas.PSet (x * xscale + xoff, z * zscale + zoff)
  298.             Case plane_YZ
  299.                 picCanvas.PSet (y * yscale + yoff, z * zscale + zoff)
  300.         End Select
  301.         ' To make things faster, only DoEvents
  302.         ' every 100 times.
  303.         i = i + 1
  304.         If i > 100 Then
  305.             i = 0
  306.             DoEvents
  307.         End If
  308.     Loop
  309. End Sub
  310. ' Get the curve parameters.
  311. Private Sub GetParameters()
  312.     If Not IsNumeric(txtA.Text) Then txtA.Text = "2"
  313.     If Not IsNumeric(txtB.Text) Then txtB.Text = ".5"
  314.     If Not IsNumeric(txtC.Text) Then txtC.Text = "-.6"
  315.     If Not IsNumeric(txtD.Text) Then txtD.Text = "-2.5"
  316.     If Not IsNumeric(txtE.Text) Then txtE.Text = "1"
  317.     If Not IsNumeric(txtX0.Text) Then txtX0.Text = "0"
  318.     If Not IsNumeric(txtY0.Text) Then txtY0.Text = "0"
  319.     If Not IsNumeric(txtZ0.Text) Then txtZ0.Text = "0"
  320.     A = CSng(txtA.Text)
  321.     B = CSng(txtB.Text)
  322.     C = CSng(txtC.Text)
  323.     D = CSng(txtD.Text)
  324.     E = CSng(txtE.Text)
  325.     X0 = CSng(txtX0.Text)
  326.     Y0 = CSng(txtY0.Text)
  327.     Z0 = CSng(txtZ0.Text)
  328. End Sub
  329. ' Erase the picCanvas.
  330. Private Sub CmdClear_Click()
  331.     picCanvas.Cls
  332. End Sub
  333. Private Sub cmdGo_Click()
  334.     If Running Then
  335.         Running = False
  336.         cmdGo.Caption = "Stopped"
  337.     Else
  338.         Running = True
  339.         cmdGo.Caption = "Stop"
  340.         DrawCurve
  341.         cmdGo.Caption = "Go"
  342.     End If
  343. End Sub
  344. Private Sub Form_Resize()
  345. Dim wid As Single
  346.     wid = ScaleWidth - picCanvas.Left
  347.     If wid < 120 Then wid = 120
  348.     picCanvas.Move picCanvas.Left, 0, wid, ScaleHeight - 1
  349. End Sub
  350. Private Sub Form_Unload(Cancel As Integer)
  351.     End
  352. End Sub
  353. Private Sub optPlane_Click(Index As Integer)
  354.     SelectedPlane = Index
  355. End Sub
  356.